/**
 * 不相邻取数
 *
 * 描述
 * 小红拿到了一个数组。她想取一些不相邻的数，使得取出来的数之和尽可能大。你能帮帮她吗？
 *
 * 输入描述：
 * 第一行输入一个正整数n, 代表数组长度
 * 第二行输入n个正整数ai, 代表整个数组。
 * 1≤n≤10^5,1≤ai≤10^9
 *
 * 输出描述：
 * 不相邻的数的最大和。
 */

import java.util.Scanner;

/**
 * 要是一个数, 在选与不选, 并且依赖于前面的的值的话,
 * 那么就优先考虑动态规划~
 * dp[i] : 在第 i 个位置, 不相邻的最大和
 *     选 nums[i - 1] : dp[i] = dp[i - 2] + nums[i - 1]
 *   不选 nums[i - 1] : dp[i] = dp[i - 1]
 *  综上 : 取这两个的最大值, dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(n)
 */

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }

        // 这里的 dp 数组要使用 long 类型的
        long[] dp = new long[n + 1];

        // 进行初始化, 因为后面要用到 i - 2, 那么就要保证 i = 2开始,
        // 那么初始化 dp[1], 就是直接选 nums[i - 1] 取得 dp[1] 最大
        dp[1] = nums[0];

        // 记录最大的结果, 因为第一个位置要跳过, 所以初始化为 第一个位置的值
        long res = nums[0];

        for (int i = 2; i <= n; i++) {

            // 状态转移方程
            dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);

            // 更新最大值
            res = Math.max(res, dp[i]);
        }

        // 返回结果
        System.out.println(res);
    }
}